$(function() {
	preload.setCache(g);
	//preload.push('bags',{url:g.serviceUrl,data:{}});
	preload.run(start);
});

function start() {

	init();
}

function init() {

	create();

	attach();

	first();

	function create() {
		

		// 是否冻结
		createStatusSel();

		// 表格
		createDg();

		// pager
		createPager();

		// 表单
		createFrm();

		

		function createStatusSel() {
			var statusSel = $('#statusSel');
			var data = [{
				value: 1,
				text: '激活'
			}, {
				value: 0,
				text: '冻结'
			}];
			statusSel.combobox('loadData', data);
			statusSel.combobox('select', 1);
		}


		function createDg() {
			var dg = $('#dg');
			dg.datagrid({
				striped: true,
				singleSelect: true,
				fitColumns: true,
				columns: [
					[{
						field: 'id',
						title: '编号',
						width: 50
					},  {
						field: 'name',
						title: '标签包',
						width: 120,
						formatter: function(value, row, index) {
							var color = row.status ? 'steelblue' : 'gray';
							return ['<span style="color:', color, ';">', value, '</span>'].join('');
						}
					}, {
						field: 'dt',
						title: '上传时间',
						width: 120
					}, {
						field: 'editor',
						title: '编辑',
						width: 100
					}]
				]
			});

		}

		function createPager() {
			var pager = $('#pager');
			pager.pagination({
				pageNumber: 1,
				pageSize: 12

			});
		}

		function createFrm() {


		
			// status
			createStatusSel();

		

			function createStatusSel() {
				var statusSel = $('#frmStatusSel');
				var data = [{
					value: 1,
					text: '激活'
				}, {
					value: 0,
					text: '冻结'
				}];
				statusSel.combobox('loadData', data);
				statusSel.combobox('select', 1);
			}
		}
	}



	function attach() {
		// 按钮
		attachSearchBtn();

		// 表格
		attachDg();

		// pager
		attachPager();

		// 表单
		attachFrm();

		function attachDg() {
			var dg = $('#dg');
			dg.datagrid({
				'onClickRow': function(rowIndex, rowData) {
					console.log('onClickRow');
					frm.setData(rowData.id);
					$('#opDist').panel('expand');
					$('#frmToolbar a[ptag="edit"]').trigger('click');
				}
			});
		}


		function attachSearchBtn() {
			var searchBtn = $('#searchBtn');
			searchBtn.bind('click', function(e) {
				proxy.getData();
			});
		}

		function attachPager() {
			var pager = $('#pager');
			pager.pagination({
				onSelectPage: function(pageNumber, pageSize) {
					console.log(pageNumber, pageSize);
					proxy.getData();
				},
				onRefresh: function() {
					proxy.getData();
				}
			});
		}

		function attachFrm() {
			$('#frmToolbar a').click(function(e) {
				// alert($(this).text());
				var ptag = $(this).attr('ptag');
				var dic = {
					"add": function() {
						var trs = $('#opDist tr');
						trs.show();
						trs.filter('[ptag="id"],[ptag="status"]').hide();
						$('#frmBagIdTb').prop('disabled', true);
						$('#frmBagNameTb').prop('disabled', false);
						$('#frmStatusSel').combobox('disable');
						frm._mode = 'add';
					},
					"edit": function() {
						var trs = $('#opDist tr');
						trs.show();
						$('#frmBagIdTb').prop('disabled', true);
						$('#frmBagNameTb').prop('disabled', true);
						$('#frmStatusSel').combobox('enable');
						frm._mode = 'edit';
					},
					"remove": function() {
						var trs = $('#opDist tr');
						trs.show();
						$('#frmBagIdTb').prop('disabled', true);
						$('#frmBagNameTb').prop('disabled', true);
						$('#frmStatusSel').combobox('disable');
						frm._mode = 'remove';
					}
				};
				dic[ptag] && dic[ptag]();
			});

			// ok btn
			$('#frmToolbarSec a').click(function(e) {
				var ptag = $(this).attr('ptag');
				var dic = {
					"ok": function() {
						var mode = frm._mode;
						var dic = {
							'add': function(data) {
								var url = g.serviceUrl;
								var params = $.extend({
									op: 'insertBag'
								}, data);

								var callback = function(data) {
										if(data.flag) {
											proxy.getData();
										} else {
											$.messager.alert('Remote Err', data.msg);
										}
									};
								$.post(url, params, callback);
							},
							'edit': function(data) {
								var url = g.serviceUrl;
								var params = $.extend({
									op: 'editBag'
								}, data);
								var callback = function(data) {
										if(data.flag) {
											proxy.getData();
										} else {
											$.messager.alert('Remote Err', data.msg);
										}
									};
								$.post(url, params, callback);
							},
							'remove': function(data) {
								var url = g.serviceUrl;
								var params = $.extend({
									op: 'deleteBag'
								}, data);
								var callback = function(data) {
										if(data.flag) {
											proxy.getData();
										} else {
											$.messager.alert('Remote Err', data.msg);
										}
									};
								$.post(url, params, callback);
							}
						};
						if(dic[mode]) {
							var data = frm.getData();
							// simple formatter 
							data.bagId = data.id;
							if(frm.check(data)) {
								dic[mode](data);
							} else {
								$.messager.alert('Warn', '参数检测错误!!');
							}
						}
					}
				};
				dic[ptag] && dic[ptag]();
			});
		}
	}

	function first() {
		var searchBtn = $('#searchBtn');
		searchBtn.trigger('click');
	}
}

function getParams() {


	// status
	var statusSel = $('#statusSel');
	var status = statusSel.combobox('getValue');

	// pager
	var pager = $('#pager');
	var pagerOpts = pager.pagination('options');
	var pageIndex = pagerOpts.pageNumber - 1;
	var pageSize = pagerOpts.pageSize;

	return {
				op: status==1?'getBags': 'getFrozenBags',
		pageSize: pageSize,
		pageIndex: pageIndex
	};
}


function getData(params, next) {

	var url = g.serviceUrl;
	var data = params;


	var callback = function(d) {

			if(!d.flag) {
				alert(d.msg);
			} else {
				g.dgData = d;
				next && next(d.data);
			}
		};
	$.post(url, data, callback);



}

function disp(data) {
	var dg = $('#dg');


	var total = data[1];
	var rows = format(data[0]);
	dg.datagrid('loadData', {
		total: total,
		rows: rows
	});

	// 格式化数据

	function format(data) {
		var rst = [];
		$.each(data, function(i, n) {
			item = $.extend({}, n);
			item.dt = parseDt(n.dt);
			rst.push(item);
		});
		return rst;

		function parseDt(dt) {
			var num = (dt.match(/\d+/)[0])-0;
			var time = new Date(num);
			console.log(time);
			return time.toString('yyyy年MM月dd日');
		}
	}
}

function setPager(data) {
	var pager = $('#pager');
	var total = data[1];
	var opts = pager.pagination('options');
	var pageIndex = Math.min(opts.pageNumber, total) - 1;
	pager.pagination({
		total: total,
		pageNumber: pageIndex + 1
	});
}


// 通过id在form中展示数据
var frm = {
	setData: function(data) {
		if(typeof(data) == "number") {
			data = JSLINQ(g.dgData.data[0]).First(function(c) {
				return c.id == data;
			});

		}
		if(data) {
			$('#frmBagIdTb').val(data.id);
			$('#frmBagNameTb').val(data.name);
			$('#frmStatusSel').combobox('select', data.status);
		}
	},
	getData: function() {
		var rst = {};
		rst.id = $('#frmBagIdTb').val();
		rst.name = $('#frmBagNameTb').val();
		rst.status = $('#frmStatusSel').combobox('getValue');
		rst.mode = this._mode;
		return rst;
	},
	check: function() {
		var rst = false;
		var data = this.getData();
		var dic = {
			'add': function(data) {
				return data.name != "";
			},
			'edit': function(data) {
				return data.id != "" && data.id != -1;
			},
			'remove': function(data) {
				return data.id != "" && data.id != -1;
			}
		};
		if(this._mode && dic[this._mode]) {
			rst = dic[this._mode](data);
		}
		return rst;
	},
	_mode: null
};




var g = {
	//dgData
	serviceUrl: '../../service/tagerOp.ashx'
};

// 代理者
var proxy = {
	getData: function() {
		var params = getParams();
		console.log(params);
		getData(params, function(data) {
			disp(data);
			setPager(data);
		});
	}

};